<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Log;

use App\Services\Admin\RoleServices;

class Menu extends Model
{
    /**
     * 与模型关联的表名
     * @var string
     */
    protected $table = 'menu';

    /**
     * 与表关联的主键
     * @var string
     */
    protected $primaryKey = 'id';

    /**
     * 主键是否主动递增 默认为 true
     * @var bool
     */
    public $incrementing = true;

    /**
     * 自动递增主键的「类型」 默认为int
     * @var string
     */
    protected $keyType = 'int';

    /**
     * 是否主动维护时间戳 默认为true
     * Eloquent 预期你的数据表中存在 created_at 和 updated_at 两个字段,自动管理这两个列
     * @var bool
     */
    public $timestamps = true;

    /**
     * 如果需要自定义时间戳的格式，在你的模型中设置 $dateFormat 属性。
     * 这个属性决定日期属性在数据库的存储方式，以及模型序列化为数组或者 JSON 的格式：
     * @var string
     */
    protected $dateFormat = "Y-m-d H:i:s";

    /**
     * 不可批量赋值的属性
     * @var array
     */
    protected $guarded = [];

    /**
     * 菜单完整的url
     * @param $value
     * @return \Illuminate\Contracts\Routing\UrlGenerator|string
     */
    public function getUrlAttribute($value){
        if(!empty($value)){
            $urlData = [
                'name' => url($value),
                'value' => $value,
            ];
        } else {
            $urlData = [];
        }
        return $urlData;
    }

    /**
     * 是否显示于菜单的中文
     * @param $value
     * @return array
     */
    public function getIsShowAttribute($value){
        if(1 == $value){
            $isShow = [
                'name' => '是',
                'value' => 1,
            ];
        } else {
            $isShow = [
                'name' => '否',
                'value' => 0,
            ];
        }

        return $isShow;
    }

    /**
     * 入库前的url处理
     * @param $value
     * @return mixed
     */
    public function setUrlAttribute($value){
        $basthUrl = url('') . '/';

        $value = !empty($value) ? str_replace($basthUrl, '', $value) : null;
        $this->attributes['url'] = $value;
    }

    /**
     * 获取父数据
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function father(){
        return $this->hasOne('App\Models\Menu', 'id', 'father_id');
    }

    /**
     * 模型操作事件
     */
    protected static function booted()
    {
        //save 事件
        static::saved(function ($menu){
            //更新超级管理员的菜单
            $roleService = new RoleServices();
            $roleService->resetAdministrator();
        });

        //delete 事件
        static::deleted(function($menu){
            //更新超级管理员的菜单
            $roleService = new RoleServices();
            $roleService->resetAdministrator();
        });
    }
}
